package org.jpropelleralt.node;

import org.jpropelleralt.box.Box;
import org.jpropelleralt.ref.Ref;

/**
 * Groups named {@link Ref}s
 * Each {@link Ref} is accessible by name, 
 * and is within this {@link Box}.
 * Names of {@link Ref}s are {@link Iterable}.
 * The contained {@link Ref}s do NOT change after creation,
 * only their contents.
 * TODO - at present, addition of NEW Refs to the Node
 * after creation doesn't seem to be a problem, but changing
 * Ref instances would be a huge problem. If it is useful and
 * harmless to be able to add new Refs, this behaviour could
 * be formally allowed here.
 */
public interface Node extends Box, Iterable<String> {

	/**
	 * Get a named {@link Ref}
	 * @param name		The name of the {@link Ref}
	 * @return			The {@link Ref}
	 */
	public Ref<?> get(String name);
	
}
